iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 15
0

建立類別和使用類別

我們可以使用類別對幾乎任何事物進行塑模,照慣例來說類別的第一個字母為大寫屬於類別的函式我們稱之為方法,以下的範例我們會提到一個__init__()方法,每當我們以類別建立一個實例的時候,python都會自動執行這個方法,這個方法的開頭和結尾都有兩個底線,那我們先來看範例吧

範例如下 :

class Dog(): # 建立一個Dog類別
    def __init__(self,name,age): 
        self.name=name # 取得name參數中的值並將其存入name變數中
        self.age=age # 取得age參數中的值並將其存入age變數中
    
    def eat(self): # 定義一個eat方法
        print(self.name + " is eating")
        
    def sleep(self): # 定義一個sleep方法
        print(self.name + " is sleeping")
        
dog1=Dog("tony",3) # 建立一個dog1實例
print("My dog's name is "+dog1.name+" and it's "+str(dog1.age)+" years old.")

dog1.eat() # 呼叫eat方法
dog1.sleep() # 呼叫sleep方法

上述的程式碼還有一些地方需要講解一下,像是第二行的__init__方法我們放了三個參數進去,self是必要的且必須放在其他參數前面,self必須放在定義中是因為python呼叫__init__方法時,方法會自動傳入self引數,每個與類別相關的方法呼叫都會自動傳入self引數

第三行和第四行這裡所定義的兩個變數名字前面都有self開頭,以self為前導的變數都能提供類別中的所有方法使用,我們也可以由類別所建立的實例來存取這些變數,可用實例來存取的變數就稱之為屬性

至於第六行和第九行定義的eat方法和sleep方法,因為我們不需要傳入姓名和年齡,所以只要定義一個self參數即可

第十三行存取屬性的用法可用句點標示法,先找到dog1實例,再尋找與實例連接的name屬性這個屬性與Dog類別中的self.name指到的屬性相同

第十五行和十六行的呼叫方法只需要寫入實例的名稱和要呼叫的方法,然後用句點分隔就可以呼叫該方法了

輸出結果 :

My dog's name is tony and it's 3 years old.
tony is eating
tony is sleeping

建立多個實例

我們可以依照需要建立多個實例,每個實例都是單獨的,有屬於自己的一組屬性,也能執行相同方法,我們使用上面的Dog類別來舉例

範例如下 :

class Dog():
    def __init__(self,name,age): 
        self.name=name
        self.age=age 
    
    def eat(self): 
        print(self.name + " is eating")
        
    def sleep(self): 
        print(self.name + " is sleeping")
        
dog1=Dog("tony",3) 
print("My dog's name is "+dog1.name+" and it's "+str(dog1.age)+" years old.")
dog1.eat()

dog2=Dog("candy",2)
print("Your dog's name is "+dog1.name+" and it's "+str(dog2.age)+" years old.")
dog2.sleep()

輸出結果 :

My dog's name is tony and it's 3 years old.
tony is eating
Your dog's name is tony and it's 2 years old.
candy is sleeping

附上排版較精美的
HackMD網址 : https://hackmd.io/E_2HbjFfQaS-SnFIb3e7Hw?both

今天結束,各位明天見


資料來源:<<python程式設計的樂趣>>-Eric Matthes著/H&C譯


上一篇
DAY 14 函式應用( 2 )
下一篇
DAY 16 類別應用
系列文
初學者Python的應用實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言